#ifndef _FORMAT_H
#define _FORMAT_H

#include "lib/global.h"
#include "lib/print.h"

char* Int2str(char* dst, int num){
    if(num == 0){
        dst[0] = '0';
        return dst + 1;
    }
    if(num < 0){
        dst[0] = '-';
        num = -num;
        dst++;
    }
    int i = 0;
    int temp = num;
    while(temp){
        temp /= 10;
        i++;
    }
    for(int j = i - 1; j >= 0; j--){
        dst[j] = '0' + num % 10;
        num /= 10;
    }
    return dst + i;
}

char* str2str(char* dst, const char* src){
    int i = 0;
    while(src[i] != '\0'){
        dst[i] = src[i];
        i++;
    }
    return dst + i;
}

char* char2str(char* dst, const char ch){
    dst[0] = ch;
    return dst + 1;
}

void FormatPrint(char* dst, const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    for(; *fmt != '\0'; fmt++)
    {
        if(*fmt == '%')
        {
            fmt++;
            switch(*fmt)
            {
                case 'd':
                    dst = Int2str(dst, va_arg(ap, int));
                    break;
                case 's':
                    dst = str2str(dst, va_arg(ap, char*));
                    break;
                case 'c':
                    dst = char2str(dst, va_arg(ap, int));
                    break;
                default:
                    break;
            }
        }
        else
        {
            *dst = *fmt;
            dst++;
        }
    }
    *dst = '\0';
    va_end(ap);
}

#endif